package com.aura.common.rabbitmq.config;

import org.springframework.amqp.support.converter.DefaultClassMapper;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * RabbitMQ 通用配置类
 * 主要用于配置消息序列化与反序列化方式，默认使用 JSON 格式。
 */
@Configuration
public class RabbitMqCommonConfig {

    /**
     * 配置一个基于 Jackson 的 JSON 消息转换器，用于将消息对象转换为 JSON 字符串发送，
     * 并在接收时将 JSON 字符串还原为 Java 对象。
     *
     * @return MessageConverter 消息转换器 Bean
     */
    @Bean
    public MessageConverter jsonToMapMessageConverter() {
        // 创建默认的类映射器，用于解决反序列化过程中类安全问题
        DefaultClassMapper defaultClassMapper = new DefaultClassMapper();

        // 设置信任的包路径，"*" 表示信任所有包
        // 生产环境中建议指定具体包名，避免安全风险
        defaultClassMapper.setTrustedPackages("com.aura.**");

        // 创建 Jackson 的 JSON 消息转换器
        Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();

        // 将类映射器设置到 JSON 消息转换器中
        jackson2JsonMessageConverter.setClassMapper(defaultClassMapper);

        // 返回配置完成的消息转换器
        return jackson2JsonMessageConverter;
    }

}
